#ifndef NEW_H
#define NEW_H

#include <assert.h>
#include <stdlib.h>
#include <stdarg.h>

typedef struct Class CLASS;

/* ----------------------------------------------------------------------------------------------- *
 *	CLASS : мета-информация описывающая произвольный тип
 */

struct Class
{
	size_t size; // размер описываемого типа данных в байтах

	void * (* pfnCtor) (void * _pSelf, va_list * ppArgs); // конструктор
	void * (* pfnDtor) (void * _pSelf);                   // деструктор
	void   (* pfnDraw) (const void * _pSelf);             // рисование
};

/* ----------------------------------------------------------------------------------------------- *
 *	динамическое создание/уничтожение объектов
 */

void * new (const void * _pClass, ...);
void delete (void * _pSelf);

/* ----------------------------------------------------------------------------------------------- *
 *	функции с динамическим связыванием (dynamic linking)
 */

void draw(const void * _pSelf);

#endif	